home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 3: The Continuation
/
17-Bit_The_Continuation_Disc.iso
/
amigan
/
amigan 10
/
menus
/
menu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-27
|
5KB
|
183 lines
/* menu test driver program */
#include "exec/types.h"
#include "intuition/intuition.h"
#include "graphics/display.h"
#include "libraries/dos.h"
#include "stdio.h"
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
extern struct Menu *MyMenu;
struct NewScreen NewScreen =
{
0,0,640,200, /* Left, Top, Width, Height */
2,0,1, /* Depth, detail Pen, Block Pen*/
HIRES, /* Hi resolution screen */
CUSTOMSCREEN, /* type */
NULL, /* Font */
"Custom Services" /* Screen Title */
};
struct NewWindow NewWindow =
{
0, 0, 640, 200, /* Left edge, Top edge, width, height */
0, 1, /* Width, Height */
CLOSEWINDOW | MENUPICK, /* IDCMP message flags */
WINDOWCLOSE | WINDOWSIZING | WINDOWDRAG | WINDOWDEPTH |
SMART_REFRESH | ACTIVATE | NOCAREREFRESH,
NULL, /* First Gadget */
NULL, /* default to checkmark */
"Menu Test Window", /* Title of window */
NULL, /* Standard Screen */
NULL, /* Bit Map */
100, 25, /* Min Width, Min height*/
640, 200, /* Max width, Height */
CUSTOMSCREEN /* Screen type */
};
int Flgs[26]; /* one flag for each letter */
main(argc, argv)
int argc;
char **argv;
{
unsigned char str[30]; /* window message structure */
unsigned int i; /* loop counter */
unsigned M0, I0, S0; /* Menu control index */
struct Screen *Screen; /* ptr to screen*/
struct Window *Window; /* ptr to window*/
struct IntuiMessage *message; /*message pointer */
Do_Arguments(argc,argv);
Delay(150);
/* open libraries, screen, and window */
IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library",0);
if( IntuitionBase == NULL )
{
printf("Unable to Open intuition.library");
exit(10);
};
GfxBase = (struct GfxBase *)
OpenLibrary("graphics.library",0);
if( GfxBase == NULL )
{
printf("Unable to Open graphics.library");
exit(10);
};
if( (Screen = (struct Screen *)OpenScreen(&NewScreen))==NULL)
{
printf("Unable to open Screen");
exit(10);
};
NewWindow.Screen = Screen;
if( (Window = (struct Window *)OpenWindow(&NewWindow))==NULL)
{
CloseScreen(Screen);
printf("Unable to open window");
exit(10);
}
SetMenuStrip(Window, MyMenu);
Move(Window->RPort,20,20); /* Move text pointer in window */
Text(Window->RPort,"Hello Sir",9); /* set hello in the window */
for (;;) /* loop untill a Close Gadget is struck */
{
WaitPort(Window->UserPort); /* wait for a message */
message = (struct IntuiMessage *)GetMsg(Window->UserPort);
if( (message->Class) == MENUPICK ) /* is it a menu message?*/
{
for (i=0; i < 30; str[i++] = ' ');
if( (message->Code) != MENUNULL)
{
M0 = MENUNUM(message->Code);
I0 = ITEMNUM(message->Code);
S0 = SUBNUM(message->Code);
if( Flgs[3] )
{
sprintf(str,"Menu %x, Item %x, Sitem %x ",
M0, I0, S0);
Move(Window->RPort, 5, 20);
Text(Window->RPort, str, 24);
}
else
{
Process_Item(M0, I0, S0);
};
}
else if ( Flgs[3] )
{
sprintf(str,"No Item Selected. ");
Move(Window->RPort, 5, 20);
Text(Window->RPort, str, 24);
};
ReplyMsg(message);
}
else
{
if ( !Flgs[3] )
{
M0 = -1;
I0 = 0;
S0 = 0;
Process_Item(M0, I0, S0);
};
break; /* Not Menu selection, must be close gadget */
};
};
ReplyMsg(message); /* Reply to message */
ClearMenuStrip(Window); /* Remove Menu */
CloseWindow(Window); /* close window */
CloseScreen(Screen); /* remove the screen */
exit(TRUE); /* Good Bye */
}
Do_Arguments(count,strings)
int count;
char *strings[];
{
register int loop;
register char *ptr;
int c;
if ( count == 2 && *strings[1] == '?' )
{
printf(" Usage is: %s [-option ... -option]\n",strings[0]);
}
else
{
for(loop=0; loop < 26; loop++) Flgs[loop] = FALSE;
while ( --count > 0 )
{
ptr = *++strings;
if ( *ptr++ == '-' )
{
c = toupper(*ptr) - 'A' ; /* get an index 0 to 25 */
if ( c >= 0 && c <= 25 )
{
Flgs[c] = TRUE;
}
else
{
printf(" %s has an invalid option: %s\n",strings[0],ptr);
};
}
else
{
printf(" irregular switch[%d] value:%s\n",count,ptr);
};
};
};
}